arc != uname -m | grep -e x86_64 -e amd64 | wc -c
.if( $(arc) == 0 )
.error invalid architecture
.endif

TARG = emily pemd mkhis mkhisq mkhisqp mkhis-dev mkhisq-dev mkthis mkxymaps-dev plotana mkehis fpt mkrawnt \
mkhis4MK0-201011 mkhis4MK1

#
ASM = yasm
CC  = gcc46
FC  = gfortran46
LD  = gfortran46

#
AFLAGS = -f elf64 -a x86 -m amd64
CFLAGS = -c -Wall
FFLAGS = -m64 -msse -msse2 -msse3 -m3dnow -mfpmath=sse \
	-fdefault-real-8 -fdefault-integer-8 -fno-range-check \
	-pipe -fcray-pointer -fbackslash -masm=att\
	-cpp -c -Wall -Wno-conversion
OMPFLAGS = -fopenmp
LDFLAGS = -m64 -lmd -lkvm -lgomp -lpthread

#
PREFIX?=/usr/local/pem
LIBDIR= ${PREFIX}/lib
BINDIR= ${PREFIX}/bin
MANDIR= ${PREFIX}/man

#
.ifdef DEBUG
AFLAGS += -g stabs 
CFLAGS += -g
FFLAGS += -g
.else
FFLAGS += -s -fomit-frame-pointer -O3 
.endif

#
LDEP = sutyA.o vutyA.o kutyA.o cutyA.o butyA.o\
sutyF.o kutyF.o vutyF.o cutyF.o butyF.o dutyF.o libcf.o autyF.o \
ground_control.o planar_pem.o projectors.o

#
MDEP = suty.mod kuty.mod cuty.mod vuty.mod duty.mod auty.mod \
ground_control.mod planar_pem.mod projectors.mod

#
.PHONY: clean all

.SUFFIXES:
.SUFFIXES: .o .s .f90 .mod .c

all: $(TARG)

.c.o:
	$(CC) $(CFLAGS) $<

.f90.o:
	$(FC) $(FFLAGS) $<

.f90.mod:
	$(FC) $(FFLAGS) $<

.s.o:
	$(ASM) $(AFLAGS) $<

projectors.o:	projectors.f90
	$(FC) $(FFLAGS) $(OMPFLAGS) $<

planar_pem.o:	planar_pem.f90
	$(FC) $(FFLAGS) $(OMPFLAGS) $<

ground_control.o: ground_control.f90 emily.f90
	$(FC) $(FFLAGS) ground_control.f90

molsem.o: molsem.f90 emily.f90
	./puttime emily.f90
	$(FC) $(FFLAGS) molsem.f90 
	$(FC) $(FFLAGS) ground_control.f90

emily: $(LDEP) molsem.o
	$(LD) $(LDEP) $(LDFLAGS) molsem.o -o emily

pemd: $(LDEP) libcf.o kutyF.o kutyA.o pemd.o
	$(LD) $(LDEP) $(LDFLAGS) pemd.o -o pemd

plotana: sutyF.o sutyA.o autyF.o plotana.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o plotana

mkxymaps-dev:	libcf.o kutyA.o kutyF.o dec.o sutyF.o sutyA.o mkxymaps-dev.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o mkxymaps-dev

mkrawnt:	kutyF.o kutyA.o sutyF.o sutyA.o dec.o libcf.o mkrawnt.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o mkrawnt

mkehis:	kutyF.o kutyA.o sutyF.o sutyA.o dec.o libcf.o mkehis.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o mkehis

mkthis:	kutyF.o kutyA.o sutyF.o sutyA.o dec.o libcf.o mkthis.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o mkthis

mkhis:	kutyF.o kutyA.o sutyF.o sutyA.o dec.o libcf.o mkhis.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o mkhis

mkhis-test:	kutyF.o kutyA.o sutyF.o sutyA.o dec.o libcf.o mkhis-test.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o mkhis-test

mkhis4MK1:	kutyF.o kutyA.o sutyF.o sutyA.o dec.o libcf.o mkhis4MK1.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o $@

mkhis4MK0-201011:	kutyF.o kutyA.o sutyF.o sutyA.o dec.o libcf.o mkhis4MK0-201011.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o $@

mkhis-dev: mkhis-common.o kutyF.o kutyA.o sutyF.o sutyA.o dec.o libcf.o mkhis-dev.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o mkhis-dev

mkhisq-dev: mkhis-common.o kutyF.o kutyA.o sutyF.o sutyA.o dec.o libcf.o mkhisq-dev.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o mkhisq-dev

mkhisq:	kutyF.o kutyA.o sutyF.o sutyA.o dec.o libcf.o mkhisq.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o mkhisq

mkhisqp: kutyF.o kutyA.o sutyF.o sutyA.o dec.o libcf.o mkhisqp.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o mkhisqp

fpt:	fpt.o
	$(LD) $(LDFLAGS) $(.ALLSRC) -o fpt

install: $(TARG)
	mkdir -p $(BINDIR)
	cp -pRf $(TARG) $(BINDIR)
clean:
	rm -f *.o *.*~ *.core *.mod $(TARG)
